package com.harry.shortcuts;

import android.annotation.SuppressLint;
import android.content.Intent;
import android.content.pm.ShortcutInfo;
import android.content.pm.ShortcutManager;
import android.graphics.drawable.Icon;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import java.util.Arrays;
import java.util.List;

/**
 * @author 拉莫帅
 * @date 2022/6/7
 * @address
 * @Desc 动态形式
 */
public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private Button add;
    private Button remove;
    private Button update;
    private ShortcutManager shortcutManager;

    @SuppressLint("NewApi")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //初始化控件
        add = findViewById(R.id.btn_add);
        remove = findViewById(R.id.btn_remove);
        update = findViewById(R.id.btn_updata);

        //获取ShortcutManager对象
        shortcutManager = getSystemService(ShortcutManager.class);

        add.setOnClickListener(this);
        remove.setOnClickListener(this);
        update.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn_add://动态添加
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1){
                    //ShortcutInfo.Builder构建快捷方式
                    ShortcutInfo shortcut = new ShortcutInfo.Builder(this, "test_add")
                            .setShortLabel(getString(R.string.app_test_add))
                            .setIcon(Icon.createWithResource(this, R.drawable.add_img))//设置快捷图标

                            //跳转到百度网页
//                            .setIntent(new Intent(Intent.ACTION_VIEW,
//                                    Uri.parse("https://www.baidu.com/")))

                            //跳转的目标，定义Activity
                            .setIntent(new Intent(Intent.ACTION_MAIN, null, this, MainActivity.class))
                            .build();

                    //setDynamicShortcuts()方法来设置快捷方式
                    shortcutManager.setDynamicShortcuts(Arrays.asList(shortcut));

                    Toast.makeText(MainActivity.this, "已添加", Toast.LENGTH_SHORT).show();
                }
                break;

            case R.id.btn_remove://动态移除
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {

                    /**
                     * removeDynamicShortcuts(List<String> shortcutIds)方法可以删除动态快捷方式
                     *
                     * 同理，在唯一标识id和动态更新处理一样，需传入动态快捷方式的id，要不然会报同样的错误
                     */
                    shortcutManager.removeDynamicShortcuts(Arrays.asList("test_add"));//唯一的id标识

                    Toast.makeText(MainActivity.this, "已移除", Toast.LENGTH_SHORT).show();
                }
                break;

            case R.id.btn_updata://动态更新
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {
                    Intent intent2 = new Intent();
                    intent2.setAction("android.intent.action.MAIN");
                    intent2.setClassName(getPackageName(),getPackageName()+".MainActivity.java");

                    /**
                     * 构建ShortcutInfo时指定相同的id，根据id去找到要更新的快捷方式
                     *
                     * 注意：唯一的id标识不可传入一个静态快捷方式的id
                     * 否则会抛出异常 应用会抛出错误：Manifest shortcut ID=XX may not be manipulated via APIs
                     */
                    ShortcutInfo info = new ShortcutInfo.Builder(this,"test_add")
                            .setIntent(intent2)
                            .setLongLabel("动态更新的长名")
                            .setShortLabel("动态更新的短名")
                            .build();
                    shortcutManager = getSystemService(ShortcutManager.class);
                    List<ShortcutInfo> dynamicShortcuts = shortcutManager.getDynamicShortcuts();

                    //updateShortcuts(List<ShortcutInfo> shortcutInfoList)方法更新现有的快捷方式
                    shortcutManager.updateShortcuts(Arrays.asList(info));

                    Toast.makeText(MainActivity.this, "已更新", Toast.LENGTH_SHORT).show();
                }
                break;
        }
    }
}
